/*
 程序作者: 戴雨晨
 完成日期: 2014 年 4 月 3 日
 章    节: 第 5 章
 题    号: 习题7
 题    目: 定义一个抽象类BasicShape，它具有如下成员：
             私有数据成员：
               area：一个double类型变量，用于存储面积。
             共有函数成员：
               getArea ：返回area变量中的值；
               CalcArea：纯虚函数。
           
           下面定义一个BasicShape类的子类Cirele，它具有如下成员：
             私有数据成员：
               CenterX ：一个整型变量，存储圆中心的X 坐标；
               CenterY ：一个整型变量，存储圆中心的Y 坐标；
               radius：一个double类型变量，存储圆的半径。
             共有函数成员：
               构造函数：接受初始化centerX ，centerY 和radius的三
             个参数。并且调用下面的calcArea函数，计算圆的面积；
               GetCenterX：返回centerX 的值；
               GetCenterY：返回centerY 的值；
               CalcArea：计算圆的面积，并将结果存储在继承所得的
             area变量中。
             
           下面在定义一个BasicShape类的子类Rectangle ，它具有如下
           成员：
             私有数据成员：
               width ：采用long类型表示的一个数据成员，代表矩形的
           宽；
               Length：采用long类型表示的一个数据成员，代表矩形的
           长。
             共有函数成员：
               构造函数：接受初始化width 和length两个参数的值，并
           且调用下面的calcArea函数，计算面积；
               GetWidth：返回width 值；
               GetLength ：返回length值；
               CalcArea：计算矩形的面积，并将结果存储在继承所得的
           area变量中。

           创建上述三个类，定义Circle对象和Rectangle 对象。检验程
           序能否正确地计算各个形状的面积。
*/
#include <iostream>
using namespace std;
class BasicShape
{
private:
    double area;
public:
    double getArea()
    {
        return area;
    }
    virtual void CalcArea() = 0;
    void setArea(double a)
    {
      area=a;
    }
};
class Circle: public BasicShape
{
private:
    int CenterX,CenterY;
    double radius;
public:
    Circle(int x, int y, int r)
    {
      CenterX=x;
      CenterY=y;
      radius=r;
      CalcArea();
    }
    int getCenterX()
    {
      return CenterX;
    }
    int getCenterY()
    {
      return CenterY;
    }
    void CalcArea()
    {
      setArea(3.1415926*radius*radius);
    }
};
class Ractangle: public BasicShape
{
private:
    long width,length;
public:
  Ractangle(long w, long l)
  {
    width=w;
    length=l;
    CalcArea();
  }
  long getWidth()
  {
    return width;
  }
  long getLength()
  {
    return length;
  }
  void CalcArea()
  {
    setArea((double)(width*length));
  }
};
int main()
{
    Circle t_c(1,1,1);
    Ractangle t_r(3,5);
    cout<<t_c.getArea()<<endl;
    cout<<t_r.getArea()<<endl;
	  return 0;
}